@echo off
chcp 65001 >nul
setlocal ENABLEDELAYEDEXPANSION

REM 设置变量
set INPUT_DIR=..\proto
set OUTPUT_DIR=..\MessageServer\src\main\java
set PROTOC=bin\protoc.exe
set ZIP_FILE=protoc-25.2-win64.zip
set DOWNLOAD_URL=https://github.com/protocolbuffers/protobuf/releases/download/v25.2/protoc-25.2-win64.zip
set ERROR_OCCURRED=false

echo [INFO] 当前目录：%CD%
echo [INFO] proto 输入目录：%INPUT_DIR%
echo [INFO] Java 输出目录：%OUTPUT_DIR%

REM 检查 protoc.exe 是否存在
if not exist %PROTOC% (
    echo [INFO] 未找到 %PROTOC%，开始下载...
    if not exist %ZIP_FILE% (
        echo [INFO] 下载 %ZIP_FILE% ...
        powershell -Command "Invoke-WebRequest -Uri '%DOWNLOAD_URL%' -OutFile '%ZIP_FILE%'"
        if errorlevel 1 (
            echo [ERROR] 下载失败！
            set ERROR_OCCURRED=true
            goto end
        )
    ) else (
        echo [INFO] 已存在压缩包，跳过下载...
    )

    echo [INFO] 解压 %ZIP_FILE% ...
    powershell -Command "Expand-Archive -Path '%ZIP_FILE%' -DestinationPath '.' -Force"
    if errorlevel 1 (
        echo [ERROR] 解压失败！
        set ERROR_OCCURRED=true
        goto end
    )

    move protoc-25.2-win64\bin\protoc.exe . >nul
    rmdir /s /q protoc-25.2-win64
    echo [INFO] 解压完成。
) else (
    echo [INFO] 已找到 %PROTOC%，跳过下载和解压。
)

REM 创建输出目录（如果不存在）
if not exist %OUTPUT_DIR% (
    mkdir %OUTPUT_DIR%
)

REM 编译 proto 文件
echo [INFO] 开始编译 proto 文件...
for %%f in (%INPUT_DIR%\*.proto) do (
    echo [INFO] 编译 %%~nxf
    "%PROTOC%" --proto_path="%INPUT_DIR%" --java_out="%OUTPUT_DIR%" "%%f"
    if errorlevel 1 (
        echo [ERROR] 编译失败：%%~nxf
        set ERROR_OCCURRED=true
        goto end
    )
)

echo [INFO] 编译完成，请检查输出目录：%OUTPUT_DIR%

:end
echo.
if "%ERROR_OCCURRED%"=="true" (
    echo [ERROR] 执行过程中发生错误！
) else (
    echo [SUCCESS] 所有操作成功完成！
)

echo.
echo ========== 脚本执行完毕，请按任意键关闭窗口 ==========
pause >nul
exit /b